package com.jinyang.jetpackdemo.bean;

import android.view.View;

import com.jinyang.jetpackdemo.util.LjyLogUtil;

/**
 * @Author: LiuJinYang
 * @CreateDate: 2022/1/13
 * @Description:
 */
interface DogFactory {
    /**
     * 变量默认都是 public static final 的,
     */
    String TAG = "DOG";

    /**
     * 1. 抽象方法：只有方法名、参数列表和返回类型，但是没有任何方法体
     * 默认是public的
     */
    void onCall(Dog d);

    /**
     * 2. 默认方法：为了提高代码的可重用性。接口的默认方法有助于在扩展系统功能的同时，不对现有的继承关系及类库产生很大的影响。
     * 通过default关键字标记, 默认是public的
     * “类优先”原则：如果一个接口实现类提供了具体的实现，那么接口中具有相同名称和参数的默认方法会被忽略
     * 假如一个类实现了两个接口，两个接口中都有同样的默认方法,该类必须要覆该方法来解决冲突，否则编译器将会报错
     */
    default void onSuccess() {
        LjyLogUtil.d("DogFactory.onSuccess");
    }

    /**
     * 3. 静态方法: 与类的静态方法类似，不同的是接口静态方法的修饰符只能是默认的public
     */
    static Dog createDog() {
        LjyLogUtil.d("DogFactory.createDog");
        return new Dog();
    }

    /**
     * 内部类是public static
     */
    class Dog {
        public void run() {
            LjyLogUtil.d("Dog.run");
        }
    }

}
